package com.ruoyi.mapper;

import com.ruoyi.entity.JrFile;
import com.ruoyi.entity.JrFolder;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
@Mapper
public interface FolderMapper {
    // 重命名文件夹
    int renameFolder(@Param("folderId") Long folderId, @Param("newName") String newName);

    // 检查同一父文件夹下是否存在同名文件夹（排除自身）
    int existsSameNameInParent(@Param("parentId") Long parentId, @Param("folderName") String folderName, @Param("excludeFolderId") Long excludeFolderId);

/*  1. 根据id查询文件夹（用于获取ancestor_path）
    2. 根据祖先路径查询所有子文件夹id（包括自身？因为自身ancestor_path也包含）
    3. 批量更新文件夹的is_delete状态（根据id列表） */
    int deleteFolderByIds(@Param("ids") List<Long> ids);
    List<Long> selectSubFolderIdsByPath(@Param("ancestorPath") String ancestorPath);
    JrFolder selectFolderById(Long id);


    // 根据传入的permittedFolderIds和userSecurity查询被允许的文件夹列表
    List<JrFolder> selectPermittedFolders(@Param("permittedFolderIds") List<Long> permittedFolderIds, @Param("userSecurity") Integer userSecurity);
    // 查询所有文件夹
    List<JrFolder> selectAllFolders();

    // 根据用户ID和安全性选择允许的文件夹

    // 知识库
    List<JrFolder> selectAllowedFolderss(
            @Param("userId") Long userId, // 用户ID
            @Param("security") Integer security // 密级
    );

    // 权限
    List<JrFolder> selectAllowedFolders(
            @Param("userId") Long userId, // 用户ID
            @Param("security") Integer security // 密级
    );

    // 根据父文件夹ID、用户ID和安全性选择子文件夹
    List<JrFolder> selectChildFolders(
            @Param("parentId") Long parentId, // 父文件夹ID
            @Param("userId") Long userId, // 用户ID
            @Param("security") Integer security // 密级
    );

    // 根据祖先路径选择文件
    List<JrFile> selectFilesByAncestorPath(
            // 文件夹ID
            @Param("folderId") Long folderId,
            // 安全性
            @Param("security") Integer security,
            @Param("userId") Long userId
    );

    // 根据文件夹ID查询文件夹
    JrFolder selectById(@Param("folderId") Long folderId);

    // 新建文件夹
    int insertFolder(JrFolder folder);

    // 根据ID查询父文件夹
    JrFolder selectParentById(Long parentId);

    // 验证同名文件夹是否存在
    boolean existsByNameAndParentId(@Param("name") String name, @Param("parentId") Long parentId);

//    设置文件夹有效时间
    int setExpirationDate(@Param("folderId")Long folderId,@Param("expirationDate") Date expirationDate);
}
